Pandas是python的一款第三方包,强大,快速,多使用于数据挖掘和整合
我会不定期记录使用pandas的心得
以下内容仅来自于个人经验,可能不是最优使用方式
Here we go
pd中常用的对象: Series, DataFrame
加载csv文件
# 加载,df的数据类型为DataFrame
df = pd.read_csv("16号线坡度表.csv")
# 显示前5行
df.head()
序号 行别 起点里程 终点里程 坡度(‰) 坡长(m) 起标高(m) 长链(m) 短链(m) \
0 1 上行 +K00000.000 +K00355.000 2.000 355.002 38.33 0.002 NaN
1 2 上行 +K00355.000 +K00780.000 -2.000 425.000 39.04 NaN NaN
2 3 上行 +K00780.000 +K01180.000 -28.000 400.000 38.19 NaN NaN
3 4 上行 +K01180.000 +K01840.000 -19.500 660.000 26.99 NaN NaN
4 5 上行 +K01840.000 +K02980.000 15.401 1141.220 14.12 1.220 NaN
Unnamed: 9
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
DataFrame每一列就是一个Series
df["起点里程"]
0 +K00000.000
1 +K00355.000
2 +K00780.000
3 +K01180.000
...
69 +K19450.000
70 +K19720.000
71 +K19980.000
Name: 起点里程, Length: 72, dtype: object
过滤掉不需要的内容
df = df.filter(items=["行别", "起点里程", "终点里程", "坡度(‰)"])
df.head()
行别 起点里程 终点里程 坡度(‰)
0 上行 +K00000.000 +K00355.000 2.000
1 上行 +K00355.000 +K00780.000 -2.000
2 上行 +K00780.000 +K01180.000 -28.000
3 上行 +K01180.000 +K01840.000 -19.500
4 上行 +K01840.000 +K02980.000 15.401
替换df的列名称
df.columns = ["a", "b", "c", "d"]
df.head()
a b c d
0 上行 +K00000.000 +K00355.000 2.000
1 上行 +K00355.000 +K00780.000 -2.000
2 上行 +K00780.000 +K01180.000 -28.000
3 上行 +K01180.000 +K01840.000 -19.500
4 上行 +K01840.000 +K02980.000 15.401
对df某一列处理
df["b"] = df["b"].apply(lambda x: float(x[2:]))
df.head()
a b c d
0 上行 0.0 +K00355.000 2.000
1 上行 355.0 +K00780.000 -2.000
2 上行 780.0 +K01180.000 -28.000
3 上行 1180.0 +K01840.000 -19.500
4 上行 1840.0 +K02980.000 15.401
找出Nan行并过滤掉
# b列3行更新为nan
df["b"][2] = np.nan
# 找出为nan的行
df[df.isnull().values == True]
a b c d
2 上行 NaN +K01180.000 -28.0
# 过滤掉nan行
df[df["b"].isnull().values == False]
拼接多个DataFrame
# 按列拼接
df = pd.concat([df1, df2], axis=1)
# 按行拼接
df = pd.concat([df1, df2], axis=0)
# 按行拼接,忽略索引
df = pd.concat([df1, df2], axis=0, ignore_index=True)
DataFrame转换数据类型
df = df.astype("float32")
将unix时间戳转换成常用时间
df = pd.read_csv("in_file")
print(df.head())
Timestamp Weighted_Price
0 1417411980 300.0
1 1417412040 300.0
2 1417412100 300.0
3 1417412160 300.0
4 1417412220 300.0
# pd.to_datetime(df['Timestamp'], unit='s')
# 按秒返回datetime类型
# pd.Series.dt.date 按天返回结果
df['date'] = pd.to_datetime(df['Timestamp'], unit='s').dt.date
print(df.head())
Timestamp Weighted_Price date
0 1417411980 300.0 2014-12-01
1 1417412040 300.0 2014-12-01
2 1417412100 300.0 2014-12-01
3 1417412160 300.0 2014-12-01
4 1417412220 300.0 2014-12-01
聚合
df = pd.read_csv("in_file")
print(df.head())
Timestamp Weighted_Price date
0 1417411980 300.0 2014-12-01
1 1417412040 300.0 2014-12-01
2 1417412100 300.0 2014-12-01
3 1417412160 300.0 2014-12-01
4 1417412220 300.0 2014-12-01
# 按date聚合
group = df.groupby('date')
# 计算Weighted_Price列的平均值
mean_price = group['Weighted_Price'].mean()
# 转换为DataFrame
df = pd.DataFrame(mean_price)
print(df.head())
Weighted_Price
date
2014-12-01 366.775068
2014-12-02 375.943001
2014-12-03 377.882701
2014-12-04 377.991743
2014-12-06 378.000000
随机打乱DataFrame
from sklearn.utils import shuffle
df = pd.read_csv("in_file")
print(df.head())
Timestamp Weighted_Price
0 1417411980 300.0
1 1417412040 300.0
2 1417412100 300.0
3 1417412160 300.0
4 1417412220 300.0
df = shuffle(df)
print(df.head())
Timestamp Weighted_Price
73203 1425305400 260.685737
8789 1421332380 150.000000
24615 1422390120 263.547273
1357887 1502386440 3417.436340
1073833 1485343200 895.790112